--           Network Working Group                                  J. Case
--           Request for Comments: 1442                 SNMP Research, Inc.
--                                                            K. McCloghrie
--                                                       Hughes LAN Systems
--                                                                  M. Rose
--                                             Dover Beach Consulting, Inc.
--                                                            S. Waldbusser
--                                               Carnegie Mellon University
--                                                               April 1993


--                        Structure of Management Information
--                                for version 2 of the
--                    Simple Network Management Protocol (SNMPv2)

          SNMPv2-SMI DEFINITIONS ::= BEGIN


          -- the path to the root

--PSIM           internet       OBJECT IDENTIFIER ::= { iso 3 6 1 }
          internet       OBJECT IDENTIFIER ::= { iso org(3) dod(6) 1 }

          directory      OBJECT IDENTIFIER ::= { internet 1 }

          mgmt           OBJECT IDENTIFIER ::= { internet 2 }

          experimental   OBJECT IDENTIFIER ::= { internet 3 }

          private        OBJECT IDENTIFIER ::= { internet 4 }
          enterprises    OBJECT IDENTIFIER ::= { private 1 }

          security       OBJECT IDENTIFIER ::= { internet 5 }

          snmpV2         OBJECT IDENTIFIER ::= { internet 6 }

          -- transport domains
          snmpDomains    OBJECT IDENTIFIER ::= { snmpV2 1 }

          -- transport proxies
          snmpProxys     OBJECT IDENTIFIER ::= { snmpV2 2 }

          -- module identities
          snmpModules    OBJECT IDENTIFIER ::= { snmpV2 3 }


          -- definitions for information modules

          MODULE-IDENTITY MACRO ::=
          BEGIN
              TYPE NOTATION ::=
                            "LAST-UPDATED" value(Update UTCTime)
                            "ORGANIZATION" Text
                            "CONTACT-INFO" Text
                            "DESCRIPTION" Text
                            RevisionPart

              VALUE NOTATION ::=
                            value(VALUE OBJECT IDENTIFIER)

              RevisionPart ::=
                            Revisions
                          | empty
              Revisions ::=
                            Revision
                          | Revisions Revision
              Revision ::=
                            "REVISION" value(Update UTCTime)
                            "DESCRIPTION" Text

              -- uses the NVT ASCII character set
              Text ::= """" string """"
          END


          OBJECT-IDENTITY MACRO ::=
          BEGIN
              TYPE NOTATION ::=
                            "STATUS" Status
                            "DESCRIPTION" Text
                            ReferPart

              VALUE NOTATION ::=
                            value(VALUE OBJECT IDENTIFIER)

              Status ::=
                            "current"
                          | "obsolete"

              ReferPart ::=
                          "REFERENCE" Text
                        | empty

              Text ::= """" string """"
          END


          -- names of objects

          ObjectName ::=
              OBJECT IDENTIFIER


          -- syntax of objects

          ObjectSyntax ::=
              CHOICE {
                  simple
                      SimpleSyntax,

                    -- note that SEQUENCEs for conceptual tables and
                    -- rows are not mentioned here...

                  application-wide
                      ApplicationSyntax
              }


          -- built-in ASN.1 types

          SimpleSyntax ::=
              CHOICE {
                  -- INTEGERs with a more restrictive range
                  -- may also be used
                  integer-value
                      INTEGER (-2147483648..2147483647),

                  string-value
                      OCTET STRING,

                  objectID-value
                      OBJECT IDENTIFIER,

                  -- only the enumerated form is allowed
                  bit-value
                      BIT STRING
              }


          -- indistinguishable from INTEGER, but never needs more than
          -- 32-bits for a two's complement representation
          Integer32 ::=
              [UNIVERSAL 2]
                  IMPLICIT INTEGER (-2147483648..2147483647)


          -- application-wide types

          ApplicationSyntax ::=
              CHOICE {
                  ipAddress-value
                      IpAddress,

                  counter-value
                      Counter32,

                  gauge-value
                      Gauge32,

                  timeticks-value
                      TimeTicks,

                  arbitrary-value
                      Opaque,

                  nsapAddress-value
                      NsapAddress,

                  big-counter-value
                      Counter64,

                  unsigned-integer-value
                      UInteger32
              }

          -- in network-byte order
          -- (this is a tagged type for historical reasons)
          IpAddress ::=
              [APPLICATION 0]
                  IMPLICIT OCTET STRING (SIZE (4))

          -- this wraps
          Counter32 ::=
              [APPLICATION 1]
                  IMPLICIT INTEGER (0..4294967295)

          -- this doesn't wrap
          Gauge32 ::=
              [APPLICATION 2]
                  IMPLICIT INTEGER (0..4294967295)

          -- hundredths of seconds since an epoch
          TimeTicks ::=
              [APPLICATION 3]
                  IMPLICIT INTEGER (0..4294967295)

          -- for backward-compatibility only
          Opaque ::=
              [APPLICATION 4]
                  IMPLICIT OCTET STRING

          -- for OSI NSAP addresses
          -- (this is a tagged type for historical reasons)
          NsapAddress ::=
              [APPLICATION 5]
                  IMPLICIT OCTET STRING (SIZE (1 | 4..21))

          -- for counters that wrap in less than one hour with only 32 bits
          Counter64 ::=
              [APPLICATION 6]
                  IMPLICIT INTEGER (0..18446744073709551615)

          -- an unsigned 32-bit quantity
          UInteger32 ::=
              [APPLICATION 7]
                  IMPLICIT INTEGER (0..4294967295)


          -- definition for objects

          OBJECT-TYPE MACRO ::=
          BEGIN
              TYPE NOTATION ::=
                            "SYNTAX" type(Syntax)
                            UnitsPart
                            "MAX-ACCESS" Access
                            "STATUS" Status
                            "DESCRIPTION" Text
                            ReferPart
                            IndexPart
                            DefValPart

              VALUE NOTATION ::=
                            value(VALUE ObjectName)

              UnitsPart ::=
                            "UNITS" Text
                          | empty

              Access ::=
                            "not-accessible"
                          | "read-only"
                          | "read-write"
                          | "read-create"

              Status ::=
                            "current"
                          | "deprecated"
                          | "obsolete"

              ReferPart ::=
                            "REFERENCE" Text
                          | empty

              IndexPart ::=
                            "INDEX"    "{" IndexTypes "}"
                          | "AUGMENTS" "{" Entry      "}"
                          | empty
              IndexTypes ::=
                            IndexType
                          | IndexTypes "," IndexType

              IndexType ::=
                            "IMPLIED" Index
                          | Index
              Index ::=
                              -- use the SYNTAX value of the
                              -- correspondent OBJECT-TYPE invocation
                            value(Indexobject ObjectName)
              Entry ::=
                              -- use the INDEX value of the
                              -- correspondent OBJECT-TYPE invocation
                            value(Entryobject ObjectName)

              DefValPart ::=
                            "DEFVAL" "{" value(Defval Syntax) "}"
                          | empty

              -- uses the NVT ASCII character set
              Text ::= """" string """"
          END


          -- definitions for notifications

          NOTIFICATION-TYPE MACRO ::=
          BEGIN
              TYPE NOTATION ::=
                            ObjectsPart
                            "STATUS" Status
                            "DESCRIPTION" Text
                            ReferPart

              VALUE NOTATION ::=
                            value(VALUE OBJECT IDENTIFIER)

              ObjectsPart ::=
                            "OBJECTS" "{" Objects "}"
                          | empty
              Objects ::=
                            Object
                          | Objects "," Object
              Object ::=
                            value(Name ObjectName)

              Status ::=
                            "current"
                          | "deprecated"
                          | "obsolete"

              ReferPart ::=
                          "REFERENCE" Text
                        | empty

              -- uses the NVT ASCII character set
              Text ::= """" string """"
          END


          END